/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

/**
 *
 * @author martin
 */
public class EstacionamientoTest {

    public EstacionamientoTest() {
    }

    @BeforeClass
    public static void setUpClass() throws Exception {
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
    }

    @Before
    public void setUp() {
    }

    @After
    public void tearDown() {
    }

    /**
      Test of push method, of class Estacionamiento.
     */
    @Test
    public void testPush() {

        System.out.println("push");
        String Elemento_G="Prueba";//Elemento de la clase String para hacer la prueba
        Estacionamiento instance = new Estacionamiento();
        instance.push(Elemento_G);//Se agrega un vehículo utilizando el método creado
        String expResult= "Prueba";
        assertEquals(expResult,instance.pop()); //compara la igualdad de resultado teorico con exp.
    }

    /**
     * Test of pop method, of class Estacionamiento.
     */
    @Test
    public void testPop() {
        System.out.println("pop");
        
        Estacionamiento instance = new Estacionamiento();
        Vehiculo Prueba= new Vehiculo("Pedro","P000AAA");

        instance.push(Prueba);
        instance.pop();// se llama al método que está en prueba ***************************************
        boolean expResult = true;//Devería estar vacío el arreglo después de hacer un pop luego el push
        boolean result = instance.empty(); //se llama para ver si realmente está vacío

        assertEquals(expResult, result);
    }

    /**
     * Test of peek method, of class Estacionamiento.
     */
    @Test
    public void testPeek() {
        System.out.println("peek");

        String Elemento_G="Prueba";//Elemento de la clase String para hacer la prueba
        Estacionamiento instance = new Estacionamiento();
        instance.push(Elemento_G);
        
        Object expResult = "Prueba";//Resultado esperado
        
        Object result = instance.peek();//Se llama al método en prueba

        assertEquals(expResult, result);

        boolean expResult2 = false; //también se revisa que no lo haya sacado de la pila
        boolean result2 = instance.empty();
        
        assertEquals(expResult2, result2);
    }

    /**
     * Test of empty method, of class Estacionamiento.
     */
    @Test
    public void testEmpty() {
        System.out.println("empty");
        Estacionamiento instance = new Estacionamiento();
        boolean expResult = true; //Ya que sin ingresar ninguno con push devería estar vacío
        
        boolean result = instance.empty();//Llamada al método en prueba

        assertEquals(expResult, result);
    }

    /**
     * Test of full method, of class Estacionamiento.
     */
    @Test
    public void testFull() {
        System.out.println("full");
        String Elemento_G="Prueba";//Elemento de la clase String para hacer la prueba
        Estacionamiento instance = new Estacionamiento();
        for(int i=0;i<instance.getMax();i++){
            instance.push(Elemento_G);
        }
        boolean expResult = true;
        boolean result = instance.full();
        assertEquals(expResult, result);
    }

    
    /**
     * Test of ultima_Posicion method, of class Estacionamiento.
     */
    @Test
    public void testUltima_Posicion() {
        System.out.println("ultima_Posicion");
        String Elemento_G="Prueba";//Elemento de la clase String para hacer la prueba
        Estacionamiento instance = new Estacionamiento();
        instance.push(Elemento_G);
        instance.push(Elemento_G);

        int expResult = 2; //debido a que se hicieron 2 push
        int result = instance.ultima_Posicion();
        assertEquals(expResult, result);
    }

    /**
     * Test of toString method, of class Estacionamiento.
     */
    @Test
    public void testToString() {
        System.out.println("toString");
        Estacionamiento instance = new Estacionamiento();
        String Elemento_G="Prueba";//Elemento de la clase String para hacer la prueba
        instance.push(Elemento_G);
        instance.push(Elemento_G);
        instance.push(Elemento_G);
        instance.push(Elemento_G);
        instance.push(Elemento_G);
        instance.push(Elemento_G);
        instance.push(Elemento_G);
        instance.push(Elemento_G);
        instance.push(Elemento_G);
        instance.push(Elemento_G); //se llamó 10 veces push
        
        String expResult = "|OC|OC|OC|OC|OC|OC|OC|OC|OC|OC|";//por lo que la pila está llena
        String result = instance.toString();
        assertEquals(expResult, result);
    }

}